package com.ads.proplan.control;

import android.content.Context;

import com.ads.proplan.db.entity.SessaoPergunta;

public class StatisticControl extends FaseControlAbstract {
	
//===========================================VARIAVEIS===========================================//	
	protected static StatisticControl uniqueInstance;
	private int listSize;
	private int numeroPerguntasCertas;
	
//===========================================ESTADOS===========================================//	
	
	private StatisticControl() {	}
	public static StatisticControl getInstance() {
		if (uniqueInstance == null) {
			uniqueInstance = new StatisticControl();
		}
		return (StatisticControl) uniqueInstance;
	}
	
	@Override
	public void initialControl(Context context) {
		getJogador(context);
		getUsuario(context);
		getFase(context);
		getListSessaoPergunta(context);
		getAllListQuestionDb(context);
		listSize = getNewListSessaoPergunta().size();
		numeroPerguntasCertas = getNumberQuestionTrue();
	}

	@Override
	public void finalizeControl() {
		uniqueInstance = null;		
	}

	@Override
	public void restartControl() {

	}

	@Override
	public void closeControl() {

	}
	
//===========================================GET AND SET==================================================//	
	
	public int getRespondidas(){
		return listSize;
	}
	
	public int getAcertos(){
		return numeroPerguntasCertas;
	}
	
	public int getErros(){
		int result = (listSize - numeroPerguntasCertas );
		return result;
	}
	
	public int getAproveitamento(){
		int result = 0;
		if(numeroPerguntasCertas >0)
		result = ((numeroPerguntasCertas * 100)/listSize);
		return result;
	}
	
	public int getPontos(){
		int result = getJogadorEntity().getPontos();
		return result;
	}
	
	public int getMaiorPonto(){
		int result = getJogadorEntity().getMaiorPontuacao();
		return result;
	}
	
	public int getNumeroPartidas(){
		int result = getJogadorEntity().getNumeroPartidas();
		return result;
	}
	
	public int getSerie(){
		int contCorreto = 0;
		int contBestSeries = 0;
		for (SessaoPergunta sessaoPergunta : arrayListSessaoPergunta) {
			if(sessaoPergunta.getIsAcerto() == 1){
				contCorreto++;
			}else{
				contCorreto = 0;
			}
			if(contCorreto > contBestSeries){
				contBestSeries = contCorreto;
			}
		}
		return contBestSeries;
	}
	
	
	public String getRapida(){
		int contTime = 100000;
		for (SessaoPergunta sessaoPergunta : arrayListSessaoPergunta) {
			if(sessaoPergunta.getTempoResolucao() < contTime){
				contTime = sessaoPergunta.getTempoResolucao();
			}
		}
		float f = contTime/10;
		String result = String.format("%2.2f", (f/100));
		return result;
	}
	
	public String getMedia(){
		int contTime = 0;
		for (SessaoPergunta sessaoPergunta : arrayListSessaoPergunta) {
			contTime = contTime + sessaoPergunta.getTempoResolucao();
		}
		float f = 1;
		if(arrayListSessaoPergunta.size()>0)
		f = (contTime/arrayListSessaoPergunta.size())/10;
		String result = String.format("%2.2f", (f/100));
		return result;
	}
	
	
	public int getFasesVencidas(){
		int contFase = 1;
		int contFaseVictory = 0;
		int fase = 0;
		for (SessaoPergunta sessaoPergunta : arrayListSessaoPergunta) {
			fase = getFaseQuestionForID(sessaoPergunta.getPergunta());
			if (fase != contFase) {
				contFaseVictory++;
				contFase = fase;
			}
		}
		return contFaseVictory;
	}

	public int getFasesPerdidas(){
		int contFase = 1;
		int contPerguntaTrue = 0;
		int contFaseLost = 0;
		int fase = 0;
		for (SessaoPergunta sessaoPergunta : arrayListSessaoPergunta) {
			fase = getFaseQuestionForID(sessaoPergunta.getPergunta());
			if (fase != contFase) {
				if (fase < contFase) {
					contFaseLost++;
				} 
				contFase = fase;
			}
			if(sessaoPergunta.getIsAcerto() == 0){
				contPerguntaTrue++;
			}else{
				contPerguntaTrue = 0;
			}
			if(contPerguntaTrue == 3){
				contFaseLost++;
				contPerguntaTrue = 0;
			}
		}
		return contFaseLost;
	}
	
//===========================================METODOS DE APOIO==============================================//
	
	public int getNumberQuestionTrue(){
		int cont = 0;
		for (SessaoPergunta sessaoPergunta : arrayListSessaoPergunta) {
			if(sessaoPergunta.getIsAcerto() == 1){
				cont++;
			}
		}
		return cont;
	}
}
